package com.lxp.basic;

//接口包含的内容
/*
 *类-单继承多实现接口
 *【接口是多继承的！】
 *java7
 * 1.常量
 * 2.抽象方法
 */

/*
 * java8
 * 3.默认方法
 * 格式：
 * public default 返回值类型 方法名称(){
 *     方法体；
 * }
 * 备注：接口中的默认方法，可以解决接口的升级问题。
 * A.接口的默认方法，可以通过接口实现类对象调用。
 * B.接口的默认方法，也可以被接口的实现类进行覆盖重写。
 *
 * 4.静态方法
 * * 格式：
 * public static 返回值类型 方法名称(){
 *     方法体；
 * }
 * 注意：不能通过接口实现类对象调用接口当中的静态方法。
 * 正确用法：通过接口名称，直接调用其中的静态方法
 * 格式：
 * 接口名称.静态方法名(参数)；
 */

/*
 * java9
 * 5.私有方法
 */
public interface Interface {

    default void method() {
        System.out.println("定义接口的默认方法。");
    }

    static void methodStatic() {
        System.out.println("定义接口的静态方法。");
    }

    //java的多态性
    /*
     * 面向对象的三大特征：封装性、继承性、多态性。
     * extends继承或者implements实现是多态的前提。
     *
     * 多态是【对象】的多态性。
     * 代码当中体现多态性：父类引用指向子类。
     * 格式：
     * 父类名称 对象名 = new 子类名称();
     * 或者
     * 接口名称 对象名 = new 实现类名称();
     *
     * 成员方法：
     * 【编译看左边，运行看右边】
     *
     * 成员变量：
     * 【编译看左边，运行也看左边】
     * */

    //匿名内部类
    /*
     *使用情况：如果接口的实现类(或者是父类的子类)只需要使用唯一的一次。
     *匿名内部类定义格式：
     *接口名称 对象名 = new 接口名称(){
     *   //覆盖重写所有的抽象方法
     * };
     *
     * 对格式"new 接口名称(){...}"进行解析
     * 1.new代表创建对象的动作
     * 2.接口名称就是匿名内部类的需要实现那个接口
     * 3.{...}这才是匿名内部类的内容
     * 注意事项：
     * 1.匿名内部类，在【创建对象】时，只能使用唯一一次。
     * 2.匿名对象，在【调用方法】时，只能调用唯一一次。
     * 3.匿名内部类是省略了【实现类/子类名称】，匿名对象是省略了【对象名称】。
     */
}
